When a user executes a program on a computer there is an implied assumption that it will not cause undesirable effects. Yet the user has no way to tell in advance from looking at the software object code or buttons on the screen what capabilities the process has or what will really happen when the process is executed. A user could execute a process intending to display a humorous animated graphic and in the background the process could be doing any number of undesirable things, such as examining the user's personal records and transmitting them to a third party without the user's knowledge. By disguising unexpected functionality as a familiar or non-threatening program, most defensive security techniques can be circumvented. Once a process gains access to a computer, there are generally no limits to what it can do. As computers play increasingly important roles in business and society, the effects of unexpected functionality in software can be devastating, far exceeding the loss of time or the cost of the system.
The substantial growth in use of public data networks such as the Internet and online services compounds the problem. Combined with network anonymity and ubiquity, the hidden capabilities of executable software have the potential to be destructive and harmful in new ways, including theft of property and confidential information. Users face a difficult quandary: useful applications require certain privileges in order to operate, yet granting these privileges to untrusted sources poses a tremendous risk that many users find to be unacceptable.
A large body of prior art exists for implementing defensive security measures that are designed to protect resources from external threats. Cryptography techniques insure that messages are protected during transmission. Yet, they offer no protection after messages are received, which can include unauthorized invocations of services located on the user's computer. Authentication techniques do not address the problem because risk must ultimately be determined by each user based on their own unique context. Acceptable risk for one user may not be acceptable for another. Moreover, once a user authorizes an authenticated process for a particular purpose, there is nothing to prevent other unrelated processes from using the methods of the authenticated process in an unauthorized manner.
Access control techniques protect resources from unauthorized use by maintaining a security policy to define who can access particular resources within the system. Access rights are set up in advance by a system administrator where the requester/grantor relationship is well-defined and remains fairly static over time. It is impractical to create separate access control policies for every new software process created, each with unique access requirements that might change continually. Moreover, the determination of which software is trusted and the functions it is trusted to perform, can vary widely from system to system and may change over time. Access control methods are generally not applicable where a trust relationship cannot be defined in advance.
Another body of prior art deals with software integrity, including various methods for detecting and removing viruses. A computer virus is an executable assemblage of computer instructions that attaches itself to a host computer process where the subsequent execution of the viral code can have undesirable effects. Virus detection operates by scanning a potential host program to determine if it contains a predefined sequence of data that might indicate the presence of a virus attachment. These methods are inadequate because, by definition, they do not evaluate the capabilities of the potential host program itself, which can contain undesirable code. Virus detection software cannot differentiate useful sequences of instructions from harmful sequences that are valid capabilities of a host program. For example, a program that is not infected with a virus may have the capability to erase files in an undesirable way, yet such a program would not trigger a warning using virus detection methods
Some programming languages attempt to solve the problem of unlimited access to resources by limiting the capabilities of their processes. For example, a language might prevent processes from accessing a computer's local files. Although this offers a measure of protection, these languages suffer from limited utility value because meaningful applications require more extensive capabilities.
In light of this discussion of the prior art and the need for an improved method for managing the risk of executing software processes, the present invention is disclosed.